package cn.xopencode.userservice.rpc.dept;

import cn.xopencode.common.framework.vo.CommonResult;
import cn.xopencode.common.framework.vo.PageResult;
import cn.xopencode.userservice.rpc.dept.dto.*;

import java.util.List;

/**
 * 部门管理
 *
 * @Author xiaodawei
 * @since 2021/9/17
 */
public interface DeptRpc {

    /**
     * 根据部门id获取该部门所有下级部门的id串
     *
     * @param deptId 部门编号
     * @return 所有下级部门的id串
     */
    CommonResult<String> getDeptIdList(String deptId);

    /**
     * 获取部门、二级部门、班组类型的部门名称
     *
     * @param userId
     * @return
     */
    CommonResult<DeptTypeDTO> getDeptTypeName(String userId);

    /**
     * 根据部门id串，获取所对应的部门名字串
     *
     * @param deptIds 部门编号
     * @return 部门名字串
     */
    CommonResult<String> getDeptNameList(String deptIds);

    /**
     * @param deptId
     * @return
     */
    CommonResult<DeptDTO> getDept(String deptId);

    /**
     * 根据获取父部门下的所有子部门
     *
     * @param parentId 父部门编号
     * @return 部门
     */
    CommonResult<List<DeptDTO>> getDeptList(String parentId);


    /**
     * 新建部门
     *
     * @param createDeptDTO 部门信息
     * @return 部门编号
     */
    CommonResult<String> createDept(CreateDeptDTO createDeptDTO);

    /**
     * 部门列表分页查询
     *
     * @param deptPageDTO 查询条件
     * @return 用户列表
     */
    CommonResult<PageResult<DeptDTO>> findDeptList(DeptPageDTO deptPageDTO);


    /**
     * 批量更新部门信息
     *
     * @param updateDeptDTOList 部门信息
     */
    CommonResult<Integer> updateDept(List<UpdateDeptDTO> updateDeptDTOList);

    /**
     * 批量更新部门属性
     *
     * @param updatePropertyDTOList 属性集合
     */
    CommonResult<Integer> updateProperty(List<UpdatePropertyDTO> updatePropertyDTOList);

}
